"use strict";
saapsta.factory("ObraDAO", function () {
    var self = this;
    self.db = window.openDatabase("SAAPSTA", "1.0", "banco", 500000);

    self.querys = {
        tabelaExiste: function (callback) {
            self.db.transaction(
                function (conexao) {
                    var sql = "SELECT name FROM sqlite_master WHERE type=\"table\" AND name=:tableName";
                    conexao.executeSql(sql, ["obra"], function (conexao, resultado) {
                        callback(resultado.rows.length === 1);
                    }, this.erro);
                },
                self.erro
            );
        },
        criarTabela: function () {
            this.tabelaExiste(function (criado) {
                if (!criado) {
                    self.db.transaction(
                        function (conexao) {
                            var sql = "CREATE TABLE IF NOT EXISTS obra " +
                                "(id INTEGER PRIMARY KEY AUTOINCREMENT, idempresa INTEGER, nome VARCHAR(50))";
                            conexao.executeSql(sql);
                        },
                        self.querys.erro
                    );
                }
            });
        },
        inserir: function (idempresa, nome) {
            self.db.transaction(
                function (conexao) {
                    var sql = "INSERT INTO obra (idempresa, nome) VALUES (?, ?)";
                    conexao.executeSql(sql, [idempresa, nome]);
                    console.log("Inserindo.. %s - %s", idempresa, nome);
                },
                self.querys.erro
            );
        },
        editar: function (obra) {
            self.db.transaction(
                function (conexao) {
                    obra.id = parseInt(obra.id, 10);
                    var sql = "UPDATE obra SET nome = ? WHERE id = ?";
                    console.log("Alterando... id: %s | nome: %s", obra.id, obra.nome);
                    conexao.executeSql(sql, [obra.nome, obra.id]);
                },
                self.querys.erro
            );
        },
        deletar: function (id) {
            self.db.transaction(
                function (conexao) {
                    id = parseInt(id, 10);
                    var sql = "DELETE FROM obra WHERE id = ?";
                    conexao.executeSql(sql, [id]);
                    console.log("Deletando id: %s", id);
                },
                self.querys.erro
            );
        },
        buscar: function (id, callback) {
            self.db.readTransaction(
                function (conexao) {
                    id = parseInt(id, 10);
                    conexao.executeSql("SELECT id, idempresa, nome FROM obra WHERE id = ? ", [id], function (conexao, resultado) {
                        callback(resultado.rows.item(0));
                    });
                },
                self.querys.erro
            );
        },
        listar: function (idempresa, callback) {
            self.db.readTransaction(
                function (conexao) {
                    var lista = [],
                        obra = {};

                    conexao.executeSql("SELECT id, idempresa, nome FROM obra WHERE idempresa = ? ", [idempresa], function (conexao, resultado) {
                        for (var i = 0, len = resultado.rows.length; i < len; i++) {
                            obra = resultado.rows.item(i);
                            lista.push({
                                id: obra.id,
                                idempresa: obra.idempresa,
                                nome: obra.nome
                            });
                        }
                        callback(lista);
                    });
                },
                self.querys.erro
            );
        },
        erro: function (conexao, msg) {
            console.log("[Erro] " + msg + " : " + conexao.message);
        }
    };

    return self.querys;
});